package com.jiliang.common.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
/**
 * Description: 生成业务对象ID的工具类
 * @Author: xiaoJiu
 * @Date: 2024/09/06
 */

public class BoIdGenerator {
    public static long generateBoId() {
        // 获取当前时间并格式化为年月日时分秒
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        String dateTimeStr = now.format(formatter);

        // 使用UUID并将其转换为仅包含数字的哈希值
        UUID uuid = UUID.randomUUID();
        long uuidAsNumber = Math.abs(uuid.getMostSignificantBits()); // 使用UUID的最重要部分并转换为正数

        // 将时间字符串和UUID部分拼接生成唯一的ID
        String boIdStr = dateTimeStr + String.valueOf(uuidAsNumber);

        // 确保boId不超过long的范围，取前18位
        long boId = Long.parseLong(boIdStr.substring(0, Math.min(boIdStr.length(), 18)));

        return boId;
    }

}
